package com.woniuxy.receiver;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Random;

/**
 * @Author: 曾令忠
 * @Description:
 * @Date: 2020/7/6 0006-下午 4:02
 */
@Component
public class AckReceiver {
    /**
     *
     * @param message 消息对象
     * @param channel 发送消息的信道
     */
    @RabbitListener(queues = "senderAckQueue")
    public void receive(Message message, Channel channel) throws IOException {
        Random random = new Random();
        int flag = random.nextInt(2);
        if(flag==1){
            //假设业务处理完成
            //通知rabbitmq消费者接收到消息
            //参数1：消息tag，告诉rabbitmq哪一条收到了；参数2：批量处理，是否将tag小于收到的都
            // 确认收到
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
            System.out.println("消息："+ new String(message.getBody())+"确认收到");
        }else {
            //参数1：消息tag，告诉rabbitmq哪一条收到了；参数2：是否批量拒绝，是否将tag小于收到的
            // 都确认收到；参数3：消息是否重新入列（队列头）
            channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false);
            System.out.println("消息："+ new String(message.getBody())+"被拒绝");
        }
    }

}
